package services

import (
	mqtt "earth/mqtt"
	"log"

	MQTT "github.com/eclipse/paho.mqtt.golang"
	"github.com/spf13/viper"
)

// 订阅
func Subscribe() {
	// 主题
	topic := viper.GetString("mqtt.topic_to_subscribe")
	qos := viper.GetUint("mqtt.qos")
	// 订阅主题
	if err := mqtt.MqttClient.Subscribe(topic, messageHandler, uint8(qos)); err != nil {
		log.Printf("订阅主题失败: %v", err)
	}
	log.Println("订阅主题成功:", topic)

}

// 设备下发消息的回调函数：主题plugin/tcp-earth/# payload：{sub_device_addr:{key:value...},sub_device_addr:{key:value...}}
func messageHandler(client MQTT.Client, msg MQTT.Message) {
	log.Println("收到消息主题: ", msg.Topic())
	log.Printf("收到消息: %s", msg.Payload())
	// // 获取token,plugin/tcp-earth/# #位置为token
	// topic := viper.GetString("mqtt.topic_to_subscribe")
	// token := msg.Topic()[len(topic)-1:]
	// // 判断token是否存在
	// values, ok := LastPushMap[token]
	// if !ok {
	// 	log.Println("token不存在,没有上次推送的设置")
	// 	return
	// } else {
	// 	// 判断长度是否为32
	// 	if len(values) != 32 {
	// 		log.Println("上次推送的设置长度不为30:", values)
	// 		return
	// 	}
	// }

	// dataList := make([]string, 32)
	// copy(dataList, values)
	// // 解析消息为json
	// dataMap := make(map[string]interface{})
	// err := json.Unmarshal(msg.Payload(), &dataMap)
	// if err != nil {
	// 	log.Println("消息解析失败:", err)
	// 	return
	// }
	// // 遍历dataMap
	// for key, value := range dataMap {
	// 	//将data转为string
	// 	valueStr, ok := value.(string)
	// 	if !ok {
	// 		log.Println("key转换失败")
	// 		continue
	// 	}
	// 	switch key {
	// 	case "Sample_time":
	// 		dataList[0] = "*MS-SET#=" + valueStr
	// 	case "Send_time":
	// 		dataList[1] = valueStr

	// 	default:
	// 		continue
	// 	}

	// }
	// // 获取当前时间，转为2016-05-04;15:02:01格式
	// now := time.Now().Format("2006-01-02;15:04:05")
	// dataList[30] = now

	// // 将dataList转为字符串用逗号分隔
	// dataStr := strings.Join(dataList, ",")
	// // 存储到ConfigMap
	// ConfigMap[token] = dataStr
}
